//package com.example.sso.service.mp.api.utils;
//
//import com.example.sso.service.model.dto.ClaimDTO;
//import com.example.sso.service.mp.api.config.JwtConfig;
//import io.jsonwebtoken.Claims;
//import io.jsonwebtoken.ExpiredJwtException;
//import io.jsonwebtoken.Jwts;
//import io.jsonwebtoken.MalformedJwtException;
//import io.jsonwebtoken.security.Keys;
//import io.jsonwebtoken.security.SignatureException;
//import jakarta.annotation.Resource;
//import org.springframework.stereotype.Component;
//import java.nio.charset.StandardCharsets;
//import java.util.Date;
//
///**
// * @author wuyunbin
// */
//@Component
//public class JwtUtil {
//
//    @Resource
//    private JwtConfig jwtConfig;
//
//    public String createRefreshToken(ClaimDTO claimDTO){
//
//        //claimDTO->claims
//        return Jwts.builder()
//                .setClaims(claimsDtoToClaims(claimDTO))
//                .setIssuedAt(new Date())
//                .setExpiration(new Date(System.currentTimeMillis() + jwtConfig.getRefreshTokenTtl()))
//                .signWith(Keys.hmacShaKeyFor(jwtConfig.getKey().getBytes(StandardCharsets.UTF_8)))
//                .compact();
//    }
//
//    public String createAccessToken(ClaimDTO claimDTO){
//        return Jwts.builder()
//                .setClaims(claimsDtoToClaims(claimDTO))
//                .setIssuedAt(new Date())
//                .setExpiration(new Date(System.currentTimeMillis() + jwtConfig.getAccessTokenTtl()))
//                .signWith(Keys.hmacShaKeyFor(jwtConfig.getKey().getBytes(StandardCharsets.UTF_8)))
//                .compact();
//    }
//
//    public Claims parseToken(String token){
//        return Jwts.parserBuilder()
//                .setSigningKey(Keys.hmacShaKeyFor(jwtConfig.getKey().getBytes(StandardCharsets.UTF_8)))
//                .build()
//                .parseClaimsJws(token)
//                .getBody();
//    }
//
//    /**
//     * 校验token
//     * @param token token
//     * @return 校验结果
//     * Valid-合法
//     * Expired-过期
//     * Invalid-无效
//     * Malformed-结构不符合标准
//     * Invalid Signature-签名无效
//     */
//    public String validateToken(String token) {
//        try {
//            Jwts.parserBuilder()
//                    .setSigningKey(Keys.hmacShaKeyFor(jwtConfig.getKey().getBytes(StandardCharsets.UTF_8)))
//                    .build()
//                    .parseClaimsJws(token);
//            return "Valid";
//        } catch (ExpiredJwtException e) {
//            return "Expired";
//        } catch (SignatureException e) {
//            return "Invalid Signature";
//        } catch (MalformedJwtException e) {
//            return "Malformed";
//        } catch (Exception e) {
//            return "Invalid";
//        }
//    }
//
//
//    public boolean isTokenExpired(String token) {
//        try {
//            Claims claims = parseToken(token);
//            Date expiration = claims.getExpiration();
//            return expiration.before(new Date());
//        } catch (Exception e) {
//            return true;
//        }
//    }
//
//    private Claims claimsDtoToClaims(ClaimDTO claimDTO){
//        Claims claims = Jwts.claims();
//
//        claims.put("memberId", claimDTO.getMemberId());
//        claims.put("type", claimDTO.getType());
//        claims.put("roleId", claimDTO.getRoleId());
//
//        return claims;
//    }
//}